package iagovsothello.ai;

import iagovsothello.core.GameState;
import iagovsothello.core.Position;
import java.util.LinkedList;

/**
 * Classe che rappresenta un generico nodo di un albero di decisione. A ciascun nodo è associato uno stato del gioco, la mossa che ha portato il gioco
 * dallo stato precedente all'attuale, una lista contenente tutti i figli di questo nodo, e una lista contenente una sequenza di mosse ottime che portano
 * dallo stato attuale allo stato finale ottimo.
 */
public class Node {

	//stato della tabella
	protected GameState state;
	
	//mossa che ha portato all'attuale posizione
	protected Position move;
	
	//lista di posizioni ottime
	protected LinkedList<Position> sequence;
	
	//lista dei figli del nodo
	protected LinkedList<Node> children;
	
	//indica se il nodo � una foglia
	protected boolean terminal;
	
	public Node(GameState state, Position move) 
	{
		this.state = state;
		this.move = move;
		sequence = new LinkedList<Position>();
		children = null;
		terminal = false;
	}
	
	/**
	 * Distrugge tutti i figli del nodo 
	 */
	public void childrenDestroy()
	{
		if (children != null)
		{
			for (Node n : children)
				n.childrenDestroy();
			children = null;
		}
	}
}
